Columns {data-width=350} ———————————————————————–
### Chart F
---
title: "Dashboard trabajadores autónomos (1991-2019)"
author: Carlos Orts
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
social: menu
source_code: embed
#runtime: shiny
---
```{r setup, include=FALSE}
if(!require(flexdashboard)){install.packages('flexdashboard')
library(flexdashboard)
}
if(!require(tidyverse)){install.packages('tidyverse')
library(tidyverse)
}
if(!require(maps)){install.packages('maps')
library(maps)
}
if(!require(DT)){install.packages('DT')
library(DT)
}
if(!require(ggplot2)){install.packages('ggplot2')
library(ggplot2)
}
if(!require(readr)){install.packages('readr')
library(readr)
}
if(!require(rmarkdown)){install.packages('rmarkdown')
library(rmarkdown)
}
```
# Cargar Datos
```{r}
dat_base <- read.csv("../datos/data_base.csv")
```
Gráficos {data-icon="fa-signal"}
=======================================================================
```{r}
#selectInput("tipo_mov", label='Tipo Movimiento', choices = c('TODOS', vars), selected = 'TODOS', width = '200px')
#selectInput("pais_sel", label='Selecciona un pais', choices = c('TODOS', unique(datos$COUNTRY_REGION)), selected = 'TODOS', width = '200px')
```
Column {data-width=350}
-----------------------------------------------------------------------
### Chart A
```{r}
# Calculamos la media de % de autoempleo por país a lo largo de todos los años
df_mean_per_country <- dat_base %>%
group_by(country) %>% # agrupa todas las filas por país
summarise(mean = mean(self_employed_perc, na.rm = TRUE)) # calcula la media ignorando los NA
# Obtenemos el mapa base del mundo en formato de data frame con coordenadas
world_map <- map_data("world") # contiene: long, lat, region (país), subregion, group
# Unimos el mapa con nuestros datos de promedio por país
map_data_joined <- world_map %>%
left_join(df_mean_per_country, by = c("region" = "country"))
# Nota: "region" es el nombre de país en el mapa y lo unimos con nuestra columna "country"
# Creamos el gráfico
ggplot(map_data_joined, aes(x = long, y = lat, group = group, fill = mean)) +
# Dibujamos los polígonos (países) con borde blanco
geom_polygon(color = "white") +
# Escala de color: gradiente de azul claro (bajo) a rojo oscuro (alto)
# Los países sin datos se pintan de gris claro
scale_fill_gradient(low = "lightblue", high = "darkred", na.value = "grey90") +
# Títulos y leyenda
labs(
title = "Porcentaje de trabajadores autónomos por país", # título principal
subtitle = "Promedio de 1991 a 2019", # subtítulo opcional
fill = "% Autoempleo" # título de la leyenda
) +
# Tema minimalista (fondo blanco y limpio)
theme_minimal() +
# Mantiene la proporción real del mapa (evita distorsiones)
coord_fixed(1.3)
```
### Chart B
```{r}
year_sel = 1991
# Filtro de datos para un año específico
df_scatter <- dat_base %>%
filter(year == year_sel) # puedes cambiar el año a voluntad
# Diagrama de dispersión coloreado por continente
ggplot(df_scatter, aes(x = gdp, y = self_employed_perc, color = continent)) +
geom_point(alpha = 0.7, size = 3) + # puntos del scatter
labs(
title = "Relación entre PIB per cápita y % de autoempleo",
subtitle = paste("Año", year_sel),
x = "PIB per cápita (USD)",
y = "% Autoempleo",
color = "Continente" # título de la leyenda
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 12)
) +
scale_x_continuous(labels = scales::comma) + # formato con comas en el eje X
scale_color_brewer(palette = "Set2") # paleta para categorías
```
Column {data-width=350}
-----------------------------------------------------------------------
### Chart C
```{r}
library(dplyr)
library(ggplot2)
# Selecciona el año que quieras
year_sel <- 2019
# ------------------------------
# Filtrar datos y seleccionar top y bottom 10
# ------------------------------
# Top 10 países con mayor % de autoempleo en el año seleccionado
top10 <- dat_base %>%
filter(year == year_sel) %>% # Filtra el dataframe por el año elegido
arrange(desc(self_employed_perc)) %>% # Ordena de mayor a menor según % autoempleo
slice(1:10) # Toma las primeras 10 filas (top 10)
# Bottom 10 países con menor % de autoempleo en el año seleccionado
bottom10 <- dat_base %>%
filter(year == year_sel) %>% # Filtra por el mismo año
arrange(self_employed_perc) %>% # Ordena de menor a mayor
slice(1:10) # Toma las primeras 10 filas (bottom 10)
# Combina top10 y bottom10 en un solo dataframe
df_lollipop <- bind_rows(top10, bottom10) %>%
mutate(country = factor(country, # Convierte la columna 'country' en factor
levels = country[order(self_employed_perc)]))
# Esto asegura que los países se muestren en el eje X en orden ascendente de % autoempleo
# ------------------------------
# Lollipop plot
# ------------------------------
#Plot con color por continentes
ggplot(df_lollipop, aes(x = country, y = self_employed_perc, color = continent)) + # Eje X = países, eje Y = % autoempleo
geom_segment(aes(x = country, xend = country, y = 0, yend = self_employed_perc),
color = "grey") + # Dibuja la "varilla" desde 0 hasta el punto (línea vertical)
geom_point(size = 4) + # Dibuja el "lollipop" en el extremo de la varilla
labs(
title = "10 países con menos y mayor % de autoempleo", # Título del gráfico
subtitle = paste("Año", year_sel), # Subtítulo mostrando el año seleccionado
x = "", # Eje X sin etiqueta
y = "% Autoempleo" # Eje Y con etiqueta
) +
theme_minimal() + # Tema limpio y minimalista
theme(
plot.title = element_text(face = "bold", size = 14), # Formato del título
plot.subtitle = element_text(size = 12), # Formato del subtítulo
axis.text.x = element_text(angle = 45, hjust = 1) # Rotar etiquetas de eje X para mejor lectura
)
```
### Chart D
```{r}
# Selecciona el país que quieres analizar
country_sel <- "USA"
# Filtrar datos del país seleccionado
df_country <- dat_base %>%
filter(country == country_sel) %>%
select(year, self_employed_perc, continent)
# Calcular la media continental
continent_sel <- df_country$continent[1] # asumimos que la columna 'continent' ya existe
df_continent <- dat_base %>%
filter(continent == continent_sel) %>%
group_by(year) %>%
summarise(mean_self_employed_perc = mean(self_employed_perc, na.rm = TRUE))
# Crear gráfico
ggplot() +
geom_col(data = df_country,
aes(x = factor(year), y = self_employed_perc),
fill = "steelblue") + # barras del país
geom_line(data = df_continent,
aes(x = factor(year), y = mean_self_employed_perc, group = 1),
color = "red", size = 1.2) + # línea de la media continental
geom_point(data = df_continent,
aes(x = factor(year), y = mean_self_employed_perc),
color = "red", size = 2) + # puntos de la media continental
labs(
title = paste("Evolución del % de trabajadores autónomos en", country_sel),
subtitle = paste("Comparado con la media del continente:", continent_sel),
x = "Año",
y = "% Autoempleo",
caption = "Barras: país | Línea roja: media continental"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 12),
axis.text.x = element_text(angle = 45, hjust = 1)
)
```
Columns {data-width=350}
-----------------------------------------------------------------------
### Chart E
```{r}
library(ggplot2)
library(dplyr)
library(forcats) # para reordenar factores
# Filtrar datos si quieres un año específico (opcional)
year_sel <- 2000
df_box <- dat_base %>%
filter(year == year_sel)
# Reordenar continentes por mediana de autoempleo
df_box <- df_box %>%
mutate(continent = fct_reorder(continent, self_employed_perc, median))
# Calcular media global
global_mean <- mean(df_box$self_employed_perc, na.rm = TRUE)
# Boxplot
ggplot(df_box, aes(x = continent, y = self_employed_perc, fill = continent)) +
geom_boxplot(alpha = 0.7) + # cajas con transparencia
geom_jitter(width = 0.2, color = "black", alpha = 0.5, size = 2) + # puntos individuales
geom_hline(yintercept = global_mean, linetype = "dashed", color = "red", size = 1) + # línea de media global
labs(
title = "Distribución del % de trabajadores autónomos por continente",
subtitle = paste("Año:", year_sel),
x = "Continente",
y = "% Autoempleo",
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
plot.subtitle = element_text(size = 12),
axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none" # elimina la leyenda
)
```
### Chart F
```{r}
# Agrupar datos por continente y año, calcular promedio por continente
df_line <- dat_base %>%
group_by(continent, year) %>%
summarise(promedio_cont = mean(self_employed_perc, na.rm = TRUE)) %>%
ungroup()
# Calcular media global por año
df_global <- dat_base %>%
group_by(year) %>%
summarise(promedio_global = mean(self_employed_perc, na.rm = TRUE))
# Gráfico de líneas
ggplot() +
# Línea por continente
geom_line(data = df_line, aes(x = year, y = promedio_cont, color = continent), size = 1.2) +
# Línea de media global
geom_line(data = df_global, aes(x = year, y = promedio_global), color = "black", linetype = "dashed", size = 1) +
labs(
title = "Evolución del % de autoempleo por continente",
subtitle = "Con línea de media global",
x = "Año",
y = "% Autoempleo",
color = "Continente"
) +
theme_minimal() +
scale_color_brewer(palette = "Set2") # paleta de colores para continentes
```
Tablas {data-icon="fa-table"}
=======================================================================
```{r}
datatable(dat_base,
caption = 'Trabajadores autónomos (1991-2019)',
rownames = T,
filter = 'top',
options = list(pageLenght = 25)
)
```
Acerca del estudio {data-icon="fa-globe"}
=======================================================================